\documentclass[margin=3pt,
  tikz,
  convert,
  convert={
    outext=.png,
    command=\unexpanded{
      pdftocairo -r 300 -png \infile % convert pdf to png image
    }
  }
  ]{standalone}

\usepackage{xcolor}

\usepackage{ctex}

% 设置绘图参数
% ==================================================
\usetikzlibrary{calc, positioning, arrows.meta }

\tikzset{bubble/.style={%
  rectangle,
  draw=gray,
  rounded corners,
  fill=#1,
  align=flush center,
  minimum height=1cm,
  minimum width=1.75cm
  }
}

\begin{document}

\begin{tikzpicture}
  % Bubbles
  \node[bubble=purple!40] (rc) at (0,0) {远程仓库\\(github/gitee)};
  \node[bubble=green!40,below=0.5 of rc] (ctan) {CTAN平台\\(ctan.org)};
  \node[bubble=blue!40,below=1.1 of ctan,xshift=45pt] (tl) {发行版};
  \node[bubble=cyan!40] (lc1) at (-4,-6) {本地仓库\\.dtx/.cls/说明书\\({\sffamily 研发})};
  \node[bubble=red!40,left=2.0 of lc1,yshift=1.0cm] (std) {规范/指南};
  \node[bubble=yellow!40,below=1.5 of std] (l3) {\LaTeX(3)};
  \node[bubble=cyan!40] (lc2) at (4,-6) {本地/云存储\\.tex/.bib/...\\({\sffamily 用户})};
  \node[bubble=red!40,right=2.0 of lc2,yshift=1.0cm] (adv) {导师};
  \node[bubble=yellow!40,below=1.5 of adv, xshift=0.8cm] (cls)
    {\verb|\documentclass[|\colorbox{red!30}{\parbox[c][1ex][c]{0.8em}{...}}\verb|]|\\
    \verb|{|\colorbox{red!30}{\parbox[c][1ex][c]{5.7em}{\texttt{nwafuthesis}}}\verb|}|};
  %\node[bubble=gray!40,below=7.5 of rc]  {\sffamily 学位论文模板工作流};

  % 绘制开发者指向关系
  \draw[-{Stealth[scale=1.0]}, blue, thick] ($(lc1.north) + (0.30, 0.00)$) to
    [out = 80, in = -160]node[midway, sloped, above]
    {git push} ($(rc.west) + (0.00, -0.20)$);
  \draw[-{Stealth[scale=1.0]}, blue, thick]($(rc.west) + (0.00, 0.20)$) to
    [out = 180, in = 80]node[midway, sloped, above]
    {git pull} ($(lc1.north) + (-0.30, 0.00)$);
  \draw[-{Stealth[scale=1.0]}, green!40!black, thick] ($(lc1.east) + (0.00, 0.00)$) to
    [out = 30, in = -145]node[midway, sloped, above]
    {upload/update} ($(ctan.south) + (-0.30, 0.00)$);
  \draw[-{Stealth[scale=1.0]}, red!40!black, thick] ($(std.east) + (0.00, 0.30)$) to
    [out = 0, in = 180]node[near start, sloped, above]
    {格式约束} ($(lc1.west) + (0.00, 0.50)$);
  \draw[-{Stealth[scale=1.0]}, red!40!black, thick, dashed] ($(lc1.west) + (0.00, 0.00)$) to
    [out = 180, in = 0]node[midway, sloped, below]
    {修订完善} ($(std.east) + (0.00, -0.30)$);
  \draw[-{Stealth[scale=1.0]}, blue, thick] ($(l3.east) + (0.00, 0.00)$) to
    [out = 0, in = 180]node[midway, sloped, below]
    {工具} ($(lc1.west) + (0.00, -0.50)$);
  \draw[-{Stealth[scale=1.0]}, blue, thick](lc1.south)--($(lc1.south)+(-1.00, -0.60)$) to
    [out = 210, in = -30]node[align=center,midway, sloped, below]
    {git add\\git commit} ($(lc1.south)+(1.00, -0.60)$)--(lc1.south);

  % 绘制用户指向关系
  \draw[-{Stealth[scale=1.0]}, red!40, thick, dashed]($(rc.east) + (0.00, 0.20)$) to
    [out = 0, in = 100]node[align=center, midway, sloped, above]
    {源码\\git clone/pull(download)} ($(lc2.north) + (0.30, 0.00)$);
  \draw[-{Stealth[scale=1.0]}, green!50!black, thick, dashed]($(lc2.north) + (-0.30, 0.00)$) to
    [out = 100, in = -20]node[align=center, midway, sloped, below]
    {issues(反馈)} ($(rc.east) + (0.00, -0.20)$);
  \draw[-{Stealth[scale=1.0]}, black, thick, dashed]($(ctan.south) + (0.30, 0.00)$) to
    [out = -45, in = 90]node[midway, sloped, above]
    {release} ($(tl.north) + (0.00, 0.00)$);
  \draw[-{Stealth[scale=1.0]}, blue, thick]($(tl.south) + (0.00, 0.00)$) to
    [out = -90, in = 180]node[align=center,midway, sloped, below]
    {.cls/说明书\\tlmgr ...} ($(lc2.west) + (0.00, 0.00)$);
  \draw[-{Stealth[scale=1.0]}, red, thick] ($(adv.west) + (0.00, 0.30)$) to
    [out = 180, in = 0]node[align=center, near start, sloped, above]
    {批注\\内容约束} ($(lc2.east) + (0.00, 0.50)$);
  \draw[-{Stealth[scale=1.0]}, blue, thick] ($(lc2.east) + (0.00, 0.00)$) to
    [out = 0, in = 180]node[midway, sloped, below]
    {pdf} ($(adv.west) + (0.00, -0.30)$);
  \draw[-{Stealth[scale=1.0]}, blue, thick] ($(cls.west) + (0.00, 0.00)$) to
    [out = 180, in = 0]node[midway, sloped, below]
    {引用} ($(lc2.east) + (0.00, -0.50)$);
  \draw[-{Stealth[scale=1.0]}, blue, thick](lc2.south)--($(lc2.south)+(1.00, -0.60)$) to
    [out = -30, in = 210]node[align=center,midway, sloped, below]
    {编辑-编译\\调试-修改} ($(lc2.south)+(-1.00, -0.60)$)--(lc2.south);

\end{tikzpicture}

\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
